package com.naiterui.ehp.bs.recommend.util;

import org.apache.commons.lang3.StringUtils;

import com.naiterui.ehp.bp.utils.lang.ConfigUtil;
import com.naiterui.ehp.bs.recommend.vo.LimitConfigVO;

/**
 * 客户端极限值配置Config
 *
 * @since 2.5.0
 */
public class LimitValueConfig {

    // 不同年龄阶层用药安全提醒，年龄值配置。儿童
    public static final String RECOM_REMIND_AGE_CHILDREN = "recom.remind.age.children";
    // 不同年龄阶层用药安全提醒，年龄值配置。孕妇
    public static final String RECOM_REMIND_AGE_PREGNANT = "recom.remind.age.pregnant";
    // 不同年龄阶层用药安全提醒，年龄值配置。老年
    public static final String RECOM_REMIND_AGE_OLDMAN = "recom.remind.age.oldman";

    // 处方笺，患者姓名长度校验
    public static final String PATIENT_NAME = "limit.patient.name";
    // 处方笺，患者年龄范围校验
    public static final String PATIENT_AGE = "prescription.patient.age";

    /**
     * 获取某项配置
     * LimitValueConfig.getLimitConfig()
     *
     * @param configName LimitValueConfig.LIMIT_*
     *
     * @return
     *
     * @Date 2016年7月1日
     * @since 2.5.0
     */

    public static LimitConfigVO getLimitConfig(String configName) {
        return parseConfigValue(ConfigUtil.getString(configName));
    }

    /**
     * 长度校验
     * LimitValueConfig.validateLimit()
     *
     * @param configName  LimitValueConfig.LIMIT_*
     * @param targetValue
     *
     * @return
     *
     * @Date 2016年7月1日
     * @since 2.5.0
     */
    public static boolean validateLimit(String configName, String targetValue) {

        LimitConfigVO configVO = parseConfigValue(ConfigUtil.getString(configName));
        int max = null == configVO.getMax() ? 0 : configVO.getMax();
        int min = null == configVO.getMin() ? 0 : configVO.getMin();

        if (StringUtils.isBlank(targetValue)) {
            return min == 0;
        }
        String regex = "^[\\s\\S]{" + min + "," + max + "}";

        return targetValue.matches(regex);
    }

    /**
     * 加载某项配置值
     * LimitValueConfig.parseConfigValue()
     *
     * @param string
     *
     * @return EXAMPLE1：
     * 19,1,10
     * max,min,def
     * EXAMPLE2：
     * 19,1
     * max,min
     *
     * @Date 2016年7月1日
     * @since 2.5.0
     */

    public static LimitConfigVO parseConfigValue(String configValue) {

        if (StringUtils.isBlank(configValue)) {
            return new LimitConfigVO();
        }
        String[] configs = configValue.split(",");
        Integer max = Integer.valueOf(configs[0].trim());
        Integer min = Integer.valueOf(configs[1].trim());
        Integer def = configs.length > 2 ? Integer.valueOf(configs[2].trim()) : null;
        return new LimitConfigVO(max, min, def);
    }

}
